package utils

import (
	"obsidian-plugin-server/config"
	"obsidian-plugin-server/models"
	"time"

	"github.com/golang-jwt/jwt/v5"
)

// GenerateToken 生成 JWT token
func GenerateToken(user *models.User, jwtConfig *config.JWTConfig) (string, error) {
	claims := jwt.MapClaims{
		"user_id": user.ID,
		"name":    user.Name,
		"uid":     user.UID,
		"exp":     time.Now().Add(time.Hour * 24 * 30).Unix(), // 30天过期
		"iat":     time.Now().Unix(),
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString([]byte(jwtConfig.Secret))
}

// GenerateApiToken 生成 API Token (用于插件)
func GenerateApiToken(user *models.User, jwtConfig *config.JWTConfig) (string, error) {
	claims := jwt.MapClaims{
		"user_id": user.ID,
		"name":    user.Name,
		"uid":     user.UID,
		"type":    "api",
		"exp":     time.Now().Add(time.Hour * 24 * 365).Unix(), // 1年过期
		"iat":     time.Now().Unix(),
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString([]byte(jwtConfig.Secret))
}
